/**
 * js basic method
 *
 * 本文规定四种js形式
 * 1 全局方法(统一以 _$ 开头)，防止和一些js库混淆
 * 2 系统内置对象的改写(包括 Array, Object, String, Date, Function, Math)
 * 3 全局对象(ajax, url, xml, loadingImg, cursor, mouse, grid)
 * 4 工具类(StringBuffer, HashMap)
 *
 * @author yukh
 * @createTime  2009-7-7
 */


/**************************************** 全局方法 **************************************/
/******************* 所有的全局方法以 $ 开头，以区别于程序员自己写的方法 ***********************/

/**
 * 根据ID返回元素对象，支持多个id一起查询
 * 		代替 document.getElementById()
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$(){
	var arr  = [];                         // 如果是多个，以数组形式返回。
	var ele;
	for(var i=0; i<arguments.length; i++){
		ele  = arguments[i];
		if(typeof(ele) == 'string')
			ele = document.getElementById(ele);
		arr.push(ele);
	}
	return arr.length < 2 ? arr[0] : arr;
}

/**
 * 创建DOM元素，如果是多个参数
 * 	 第一个： 要创建的元素类型
 *   第二个： 元素css样式名称
 *   第三个： 元素id属性
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$c(){
	var ele, typ;
	if(arguments[0].toLowerCase()=="checkbox"){
		arguments[0] = "input";
		typ = "checkbox"
	}else if(arguments[0].toLowerCase()=="radio"){
		arguments[0] = "input";
		typ = "radio";
	}else if(arguments[0].toLowerCase()=="text"){
		arguments[0] = "input";
		typ = "text";
	}else if(arguments[0].toLowerCase()=="button"){
		arguments[0] = "input";
		typ = "button";
	}
	
	switch (arguments.length){
		case 1  :
			ele = document.createElement(arguments[0]);
		    break;
		case 2  :
			ele = document.createElement(arguments[0]);
			ele.className = arguments[1];
			break;
		case 3  :
			ele = document.createElement(arguments[0]);
			ele.className = arguments[1];
			ele.id        = arguments[2];
			break;
		default : alert("参数错误");
	}

	if(typ){
		ele.type = typ;
	}
	return ele;
}

/**
 * 创建一个标签元素，如果有参数而且是一个，则是lab内容。 
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$label(){
	var lab = _$c("label");
	if(arguments.length==1){
		lab.innerHTML = arguments[0];
	}
	return lab;
}

/**
 * 根据id属性获得元素值
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$v(obj){
	if(typeof(obj) == 'string')
		obj = _$(obj);
	if(obj.tagName=="select"){
		var index = obj.selectedIndex;
		return obj.options[index].value
	}else{
		return obj.value;
	}
}

/**
 * 根据标签名获得元素数组，如果第二个参数不为空，则
 * 是查询某个范围中的标签对象
 * @author yukh 
 * @createTime 2009-7-8
 * @change shanhy
 * @changeTime 2009-7-11
 * @changeContent 添加 objId != null
 */
function _$t(tagName, objId){
	var arr = null;
	if(objId != null && String.strIsNotEmpty(objId)){
		arr = _$(objId).getElementsByTagName(tagName);		
	}else
		arr = document.getElementsByTagName(tagName)
	return arr;
}

/**
 * 根据name名称获得元素数组
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$n(name){
	return document.getElementsByName( name );
}

/**
 * 创建文本节点
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$txt(value){
	return document.createTextNode(value);
}

/**
 * 导航
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$go(address){
	document.location.href(address);
}

/**
 * 创建按钮，如果有多个参数
 * 	 第一个： 按钮需要显示的文字
 * 	 第二个： 按钮css样式名称
 *   第三个： 按钮单击事件函数
 *   第四个： 按钮id属性
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$btn(){
	var btn     = _$c("input");
	btn.type    = "button";

	switch(arguments.length){
		case 1  :
			btn.value      = arguments[0];
			break;
		case 2  :
			btn.value      = arguments[0];
			btn.className  = arguments[1];
			break;
		case 3  :
			btn.value      = arguments[0];
			btn.className  = arguments[1];
			btn.onclick    = arguments[2];
			break;
		case 4  :
			btn.value     = arguments[0];
			btn.className = arguments[1];
			btn.onclick   = arguments[2];
			btn.id        = arguments[3];
			break;
		default : alert("参数错误--$btn");
	}
	return btn;
}

/**
 * 创建超链
 * @param1 text
 * @param2 clickMethod
 * @param3 href
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$ca(){
	if(arguments.length<2){
		alert("$ca 参数个数不对");
		return null;
	}else{
		var a        = _$c("a");
		a.innerHTML  = arguments[0];
		a.onclick    = arguments[1];
		a.href       = (arguments.length==3 ? arguments[2] : "javaScript:void(0)");
		return a;
	}
}

/**
 * 隐藏元素(参数可为对象或者对象名)，支持多个
 * @param id/obj
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$hid(){
	for(var i=0; i<arguments.length; i++){
		if(typeof(arguments[i]) == "string"){
			_$(arguments[i]).style.display  =  "none";
		}else{
			arguments[i].style.display     =  "none";
		}
	}
}

/**
 * 显示元素(参数可为对象或者对象名)，支持多个
 * @param id/obj
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$show(){
	for(var i=0; i<arguments.length; i++){
		if(typeof(arguments[i]) == "string"){
			_$(arguments[i]).style.display  =  "block";
		}else{
			arguments[i].style.display     =  "block";
		}
	}
}

/**
 * 设置指定元素的disabled状态
 * @param 元素id/obj
 * @param 状态true|false		"true"
 * @author shanhy
 * @createTime 2009-07-10
 */
function _$setDisabled(){
	if(arguments.length <= 0)
		return;
	var arg1,arg2;
	if(arguments.length >= 1){
		arg1 = arguments[0];
		if(typeof(arg1) == 'string'){
			arg1 = _$(arg1);
			arg2 = true;//默认为true
		}
	}
	if(arguments.length >= 2)
		arg2 = arguments[1];
	arg1.disabled = arg2;
}

/**
 * 灰化(使之不可用)页面控件(参数可为对象或者对象名)，支持多个
 * @param id/obj
 * @author shanhy
 * @createTime 2009-7-10
*/
function _$disabled(){
	for(var i=0,j=arguments.length; i<j; i++){
		if(typeof(arguments[i]) == "string"){
			_$(arguments[i]).setAttribute("disabled",true);
		}else{
			arguments[i].setAttribute("disabled",true);
		}
	}
}

/**
 * 启用(使之可用)页面控件(参数可为对象或者对象名)，支持多个
 * @param id/obj
 * @author shanhy
 * @createTime 2009-7-10
*/
function _$unDisabled(){
	for(var i=0,j=arguments.length; i<j; i++){
		if(typeof(arguments[i]) == "string"){
			_$(arguments[i]).setAttribute("disabled",false);
		}else{
			arguments[i].setAttribute("disabled",false);
		}
	}
}

/**
 * 设置指定元素的readOnly状态
 * @param 元素id/obj
 * @param 状态true|false		"true"
 * @author shanhy
 * @createTime 2009-07-10
 */
function _$setReadOnly(){
	if(arguments.length <= 0)
		return;
	var arg1,arg2;
	if(arguments.length >= 1){
		arg1 = arguments[0];
		if(typeof(arg1) == 'string'){
			arg1 = _$(arg1);
			arg2 = true;//默认为true
		}
	}
	if(arguments.length >= 2)
		arg2 = arguments[1];
	arg1.readOnly = arg2;
}

/**
 * 表单元素只读 (参数可为对象或者对象名)，支持多个
 * @param id/obj
 * @author shanhy
 * @createTime 2009-7-10
*/
function _$readOnly(){
	for(var i=0,j=arguments.length; i<j; i++){
		if(typeof(arguments[i]) == "string"){
			_$(arguments[i]).readOnly = true;
		}else{
			arguments[i].readOnly = true;
		}
	}
}

/**
 * 表单元素不只读 (参数可为对象或者对象名)，支持多个
 * @param id/obj
 * @author shanhy
 * @createTime 2009-7-10
*/
function _$unReadOnly(){
	for(var i=0,j=arguments.length; i<j; i++){
		if(typeof(arguments[i]) == "string"){
			_$(arguments[i]).readOnly = false;
		}else{
			arguments[i].readOnly = false;
		}
	}
}

/**
 * 锁定元素
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$unLook(){
	for(var i=0; i<arguments.length; i++){
		if(typeof(arguments[i]) == "string"){
			_$(arguments[i]).style.visibility  =  "hidden";
		}else{
			arguments[i].style.visibility     =  "hidden";
		}
	}
}

/**
 * 元素解锁
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$look(){
	for(var i=0; i<arguments.length; i++){
		if(typeof(arguments[i]) == "string"){
			_$(arguments[i]).style.visibility  =  "visible";
		}else{
			arguments[i].style.visibility     =  "visible";
		}
	}
}

/**
 * 获得页面控件的绝对位置
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$getPos(obj){
	if( typeof(obj) == "string" ){
		obj = _$(obj);
	}
	var l = $getL(obj);
	var t = $getT(obj);
	return {"left":l, "top":t }; 
}

/**
 * 获得页面控件的绝对位置(左)
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$getL(obj){
	var l = obj.offsetLeft;
	while(obj = obj.offsetParent){
		l += obj.offsetLeft; 
	}
	return l;
}

/**
 * 删除所有子节点
 * @param htmlElement
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$removeAllChild(){
	for(var i=0; i<arguments.length; i++){
		if(arguments[i] && arguments[i].firstChild){
			for(var j=0; j<arguments[i].childNodes.length;)
				arguments[i].removeChild(arguments[i].childNodes[j]);
		}
	}	
}

/**
 * 获得页面控件的绝对位置(高)
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$getT(obj){
	var t = obj.offsetTop;
	while(obj = obj.offsetParent){
		t += obj.offsetTop;
	}
	return t;
}

/**
 * 获取当前视图（屏幕）高度和宽度
 * @author yukh 
 * @createTime 2009-7-8
*/
function _$getViewInfo() {
	var w = (window.innerWidth) ? window.innerWidth : (document.documentElement && document.documentElement.clientWidth) ? document.documentElement.clientWidth : document.body.offsetWidth;     
	var h = (window.innerHeight) ? window.innerHeight : (document.documentElement && document.documentElement.clientHeight) ? document.documentElement.clientHeight : document.body.offsetHeight;     
	return {width:w,height:h};
}

/**
 * 得到当前系统默认工作路径
 * 	 ${pageContext.request.contextPath}
 * @author: yukh
 * @createTime: 2009-7-7
 */
function _$getContextPath(){
	var realPath= document.location.pathname;
	realPath=realPath.split("/")[1];
	return "/"+realPath;
}

/**
 * 比较两个不为空的金额之间的大小
 */
function _$equlMoney(fistMoney,secondMoney){
	if(fistMoney - secondMoney >= 0){
		return true;
	}else{
		return false;
	}
}

/*************************************** 工具对象 *************************************************/
/* 
 * string  
 */
/**
 * Returns true if str is empty, else false
 * @author yukh 
 * @createTime 2009-7-8
*/
String.strIsEmpty = function(str){
	var reg = /(\s|　)+/gi;
    str = str.replace(reg,'');
    var regTextNull = /.+/;
    return !regTextNull.test(str);
}

/**
 * Returns false if str is empty, else true
 * @author yukh 
 * @createTime 2009-7-8
*/
String.strIsNotEmpty = function(str){
	var result = false;
	if(typeof(str) == 'string'){
		var reg = /(\s|　)+/gi;
    	str = str.replace(reg,'');
    	var regTextNull = /.+/;
    	result = regTextNull.test(str);
	}
    return result;
}
	
/* Math  
 */
/**
 *  对数字四舍五入
 * 		Dight： need process number - 要处理数字
 * 		How：   要处理位数（这里是10的次方）
 * @author yukh 
 * @createTime 2009-7-8
*/
Math.forDight = function(Dight,How){
	Dight = Math.round(Dight*Math.pow(10,How))/Math.pow(10,How);
    return Dight;  
}

/*************************************** 其他工具 *************************************************/

/**
 * checkbox 选中操作, 适用于html标签。
 * @param  param  checkbox 值保存
 * @author jiangy 
 * @createTime 2009-7-8
*/
function checkCheckBox(){
	var checkboxArr = document.getElementsByTagName("INPUT");
	for(var i=0, n=checkboxArr.length; i<n; i++){
		if(checkboxArr[i].type == "checkbox"){
			var param = checkboxArr[i].param;
			var valu = checkboxArr[i].value;
			if(param.indexOf(valu) != -1)
				checkboxArr[i].checked = true;	
		}
	}
}

/**
 * 将select 结果存放到param，根据这个判断哪个select是否
 * 被选中。
 * @author yukh 
 * @createTime 2009-7-8
*/
function checkSelect() {
	var sel = document.getElementsByTagName('select');
	for(var i=0;i<sel.length;i++) {
		for(var j=0;j<sel[i].options.length;j++) {
			if(sel[i].param == sel[i].options[j].value) {
				sel[i].options[j].selected = true;
				break;
			}
		}
	}
}

/**
 * 		有的select标签有其他选项，选择其他后会在后面
 * 的隐藏输入框显示或者隐藏。
 * @selectId select　标签id
 * @inputId  隐藏输入框id
 * @otherVal 当select value等于otherVal 进行显示。
 * @author yukh 
 * @createTime 2009-8-10
*/
function selectOtherHideShow(selectId, inputId, otherVal){
	var selec = $(selectId);
	var inpu = $(inputId);
	if(selec.value == otherVal){
		inpu.style.display = "";
		inpu.disabled = "";
	}else{
		inpu.style.display = "none";
		inpu.disabled = "disabled";
	}
}

 /**
  * 提交需要验证的form
  * @param act  URL
  * @author yukh 
  * @createTime 2009-7-9
 */
function formSub(formId, act){
	var form = document.getElementById(formId);
	if(clicked.Validate(form)){
		if(String.strIsNotEmpty(act))
			form.action = act;
		form.submit();
		return true;
	}return false;
	if(String.strIsNotEmpty(act))
		form.action = act;
	form.submit();
	return true;
}

/**
 * 清空指定Id的value值
 * @param 表单元素id，支持多个
 * @author shanhy
 * @createTime 2009-7-10
 */
function clearInput(){
	if(arguments.length <= 0)
		return;
	for(var i=0,j=arguments.length;i<j;i++){
		ele =arguments[i];
		if(typeof(ele)=='string')
			ele = $(ele);
		ele.value = '';
	}
}

/**
 * 根据格式获得一天前的时间
 * @param 如:yyyy年MM月dd日|yyyy-MM-dd  支持yy/MM/dd格式
 * @param 该参数不是必须，如果提供，则为指定的元素赋值为当前日期
 * @author shanhy
 * @createTime 2009-7-10
 */
function getYesterday(){
	var format = 'yyyy-MM-dd';//提供默认格式;
	var arg = arguments[0];
	if(arguments.length > 0)
		if(arg != null && String.strIsNotEmpty(arg))
			format = arg;
	var date = new Date();
	var year = date.getYear();
	var month = date.getMonth() + 1;
	var day = date.getDate() - 1;
	var hour = date.getHours();
	var min = date.getMinutes();
	var second = date.getSeconds();
	format = formatDate(year,month,day,hour,min,second,format);
	if(arguments.length>=2){
		var arg2 = arguments[1];
		if(typeof(arg2) == 'string')
			arg2 = $(arg2);
		arg2.value = format;
	}
	return format;
}
/**
 * 根据格式获得一天后的时间
 * @param 如:yyyy年MM月dd日|yyyy-MM-dd  支持yy/MM/dd格式
 * @param 该参数不是必须，如果提供，则为指定的元素赋值为当前日期
 * @author shanhy
 * @createTime 2009-7-10
 */
function getTomorrow(){
	var format = 'yyyy-MM-dd';//提供默认格式;
	var arg = arguments[0];
	if(arguments.length > 0)
		if(arg != null && String.strIsNotEmpty(arg))
			format = arg;
	var date = new Date();
	var year = date.getYear();
	var month = date.getMonth() + 1;
	var day = date.getDate() + 1;
	var hour = date.getHours();
	var min = date.getMinutes();
	var second = date.getSeconds();
	format = formatDate(year,month,day,hour,min,second,format);
	if(arguments.length>=2){
		var arg2 = arguments[1];
		if(typeof(arg2) == 'string')
			arg2 = $(arg2);
		arg2.value = format;
	}
	return format;
}

/**
 * 根据格式获得当前日期
 * @param 如:yyyy年MM月dd日|yyyy-MM-dd  支持yy/MM/dd格式
 * @param 该参数不是必须，如果提供，则为指定的元素赋值为当前日期
 * @author shanhy
 * @createTime 2009-7-10
 */
function getCurrDate(){
	var format = 'yyyy-MM-dd';//提供默认格式;
	var arg = arguments[0];
	if(arguments.length > 0)
		if(arg != null && String.strIsNotEmpty(arg))
			format = arg;
	var date = new Date();
	var year = date.getYear();
	var month = date.getMonth() + 1;
	var day = date.getDate();
	var hour = date.getHours();
	var min = date.getMinutes();
	var second = date.getSeconds();
	format = formatDate(year,month,day,hour,min,second,format);
	if(arguments.length>=2){
		var arg2 = arguments[1];
		if(typeof(arg2) == 'string')
			arg2 = $(arg2);
		arg2.value = format;
	}
	return format;
}

/**
 * 格式化时间
 * @param 年 
 * @param 月
 * @param 日
 * @param 时
 * @param 分
 * @param 秒
 * @param 格式---如:yyyy年MM月dd日|yyyy-MM-dd  支持yy/MM/dd格式
 * @author shanhy
 * @createTime 2009-7-10
 */
function formatDate(year,month,day,hour,min,second,format){
	if(month < 10)
		month = "0" + month;
	if(day < 10)
		day = "0" + day;
	if(hour < 10)
		hour = "0" + hour;
	if(second < 10)
		second = "0" + second;
	format = format.replace("yyyy",year);
	if(format.indexOf("yyyy") == -1 && format.indexOf("yy") != -1)
		format.replace("yy",year.slice(2,4));
	format = format.replace("MM",month);
	format = format.replace("dd",day);
	format = format.replace("hh",hour);
	format = format.replace("mm",min);
	format = format.replace("ss",second);
	return format;
}

/**
 * 只能输入小数
 * 		文本框调用采用onkeypress事件 	如:onkeypress=onlySingle(this);
 * @param 文本框Id，支持对象
 * @author shanhy
 * @createTime 2009-7-10
 */
function onlySingle(arg){
	if(typeof(arg) == 'string')
		arg = $(arg);
	var val = arg.value;
	var key = event.keyCode;
	if(key < 48 || key > 57){
		if(key == 46){
			if(val.indexOf(".")!=-1)
				event.keyCode=0;
		}else
			event.keyCode=0;
	}else{
		if(key == 48){
			if(val == '0')
				event.keyCode=0;
		}
	}
}



/**
 * 只能输入整数
 * 		文本框调用采用onkeypress事件 	如:onkeypress=onlyNum();
 * @author shanhy
 * @createTime 2009-7-10
 */
function onlyNum() {
	var key = event.keyCode;
	if (key < 48 || key > 57) {
		event.keyCode = 0;
		return;
	}
}

/**
 * 比较日期
 * @param string类型的参数日期
 *  参数格式是 yyyy-mm-dd hh:MM:ss 或 yyyy-mm-dd
 * @author shanhy
 * @createTime 2009-7-10
 */
function compareDate(dateOne, dateTwo){
	var date1 = parseStringToDate(dateOne);
	var date2 = parseStringToDate(dateTwo);
	if(date1 > date2)
		return false;
	else
		return true;
}

/**
 * 字符串 conversion 日期
 * 字符串格式 yyyy-mm-dd
 * @author shanhy
 * @createTime 2009-7-10
 */
function parseStringToDate(str){
	var date = null;
	if(str != null || str != ""){
		if(str.length < 11){   /* no time */
			date = new Date(str.substring(0, 4), str.substring(5, 7)-1,
						str.substring(8, 10));	
		}else if(str.length > 11 && str.length < 17){   /* no second */
			date = new Date(str.substring(0, 4), str.substring(5, 7)-1,
						str.substring(8, 10), str.substring(11, 13), 
						str.substring(14, 16));	
		}else if(str.length > 17){
			date = new Date(str.substring(0, 4), str.substring(5, 7)-1,
						str.substring(8, 10), str.substring(11, 13), 
						str.substring(14, 16), str.substring(17, 19));	
		}
	}
	return date;
}

/**
 * 格式化日期
 * 		
 * @param dateStr  需要格式化的日期字符串
 * @param format   日期格式化格式
 * 		可以为 yyyy年MM月dd日 hh:mm:ss，yyyy-MM-dd ，yy/MM/dd
 * @author yukh 
 * @createTime 2009-8-8
*/
function formateString2String(dateStr, format){
	if(String.strIsEmpty(format))
		format = "yyyy-MM-dd";
	var date = parseStringToDate(dateStr);
	var year = date.getYear();
	var month = date.getMonth() + 1;
	var day = date.getDate();
	var hour = date.getHours();
	var min = date.getMinutes();
	var second = date.getSeconds();
	if(month < 10)
		month = "0" + month;
	if(day < 10)
		day = "0" + day;
	if(hour < 10)
		hour = "0" + hour;
	if(min < 10)
		min = "0" + min;	
	if(second < 10)
		second = "0" + second;		
	format = format.replace("yyyy",year);
	if(format.indexOf("yyyy") == -1 && format.indexOf("yy") != -1)
		format.replace("yy",year.slice(2,4));
	format = format.replace("MM",month);
	format = format.replace("dd",day);
	format = format.replace("hh",hour);
	format = format.replace("mm",min);
	format = format.replace("ss",second);
	return format;
}

/**
  * 	改变某一区域中的元素- input、select、textarea状态
  * （是否可操作）在"可操作"，"不可操作"之间转换
  *  typ：  false2true      可操作    -> 不可操作
  * 		true2false      不可操作  -> 可操作
  *  divId:  需要改变的div  id
  * @author yukh 
  * @createTime 2009-7-15
 */
function changeElementDisable(typ, divId){	
	var di = document.getElementById(divId);
	var inpu = di.getElementsByTagName("INPUT");
	for(var i=0; i < inpu.length; i++){
		 with(inpu[i]){
			 if(typ == "false2true"){
			 	inpu[i].disabled = "disabled";
			 	inpu[i].style.backgroundColor = "#E6E6E6";
			 }else if(typ == "true2false"){
				inpu[i].disabled = "";
			 }
		 }
	}
	var sele = di.getElementsByTagName("SELECT");
	for(var i=0; i < sele.length; i++){
		 with(sele[i]){
			  if(typ == "false2true"){
			 	sele[i].disabled = "disabled";
			 	sele[i].style.backgroundColor = "#E6E6E6";
			  }else if(typ == "true2false")
				sele[i].disabled = "";
		 }
	}
	var textare = di.getElementsByTagName("TEXTAREA");
	for(var i=0; i < textare.length; i++){
		 with(textare[i]){
			  if(typ == "false2true"){
			 	textare[i].disabled = "disabled";
			 	textare[i].style.backgroundColor = "#E6E6E6";
			  }else if(typ == "true2false")
				textare[i].disabled = "";
		 }
	}
}

/**
 * 比较两个日期输入框，后面必须大于前面的。
 * @param idOne    第一个日期输入框
 * @param idTwo    第二个日期输入框
 * @param totalId  有求和需求时，添加，否则为空
 * @param alertContent  日期比较错误时，提示语。
 * @author yukh 
 * @createTime 2009-7-17
*/
function compareTwoDate(idOne, idTwo, totalId, alertContent){
	var date1 = $(idOne).value;
	var date2 = $(idTwo).value;
	var date3 = parseString2Date(date1);
	var nowDate = new Date();
	/**if(date3 < nowDate){
		alert("开始时间不能在当前时间之前");
		$(idOne).value = "";
		$(idTwo).value = "";
		return false;
	}**/
	if(!compareDate(date1, date2)){
		alert(alertContent);
		$(idOne).value = "";
		$(idTwo).value = "";
		if(totalId != "")
			$(totalId).value = "";
	}else{
		if(totalId != ""){
			var days = daysElapsed(parseString2Date(date2), parseString2Date(date1));	
			days = forDight(days, 1);
			$(totalId).value = days + "小时";
		}
	}
}

/**
 * 将数字小写转换为大写
 * 	11 -> 壹拾壹圆整
 * @author yukh 
 * @createTime 2009-8-20
*/
function number2Chinese(num) {
	if (isNaN(num) || num > Math.pow(10, 12))
		return ""
	var cn = "零壹贰叁肆伍陆柒捌玖"
	var unit = new Array("拾佰仟", "分角")
	var unit1 = new Array("万亿", "")
	var numArray = num.toString().split(".")
	var start = new Array(numArray[0].length - 1, 2)

	function toChinese(num, index) {
		var num = num.replace(/\d/g, function($1) {
					return cn.charAt($1)
							+ unit[index].charAt(start-- % 4 ? start % 4 : -1)
				})
		return num
	}

	for (var i = 0; i < numArray.length; i++) {
		var tmp = ""
		for (var j = 0; j * 4 < numArray[i].length; j++) {
			var strIndex = numArray[i].length - (j + 1) * 4
			var str = numArray[i].substring(strIndex, strIndex + 4)
			var start = i ? 2 : str.length - 1
			var tmp1 = toChinese(str, i)
			tmp1 = tmp1.replace(/(零.)+/g, "零").replace(/零+$/, "")
			tmp1 = tmp1.replace(/^壹拾/, "拾")
			tmp = (tmp1 + unit1[i].charAt(j - 1)) + tmp
		}
		numArray[i] = tmp
	}

	numArray[1] = numArray[1] ? numArray[1] : ""
	numArray[0] = numArray[0] ? numArray[0] + "圆" : numArray[0], numArray[1] = numArray[1]
			.replace(/^零+/, "")
	numArray[1] = numArray[1].match(/分/) ? numArray[1] : numArray[1] + "整"
	return numArray[0] + numArray[1]
}

/**
 * 	  在javascript中，乘法结果会有误差，特别在两个浮点数相乘的时候会比较明显。
 * 这个函数返回较为精确的乘法结果。 
 * @author yukh 
 * @createTime 2009-8-27
*/
function numberMul(arg1,arg2,how){ 
	var res = 0;
	var s1 = arg1.toString();
	var s2 = arg2.toString(); 
	if(s1.indexOf(".") != -1)
		res += s1.split(".")[1].length;
	if(s2.indexOf(".") != -1)
		res += s2.split(".")[1].length;
	var result = Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,res);
	if(String.strIsNotEmpty(how))
		result = Math.forDight(result, how);
	return result
} 

/**
 * 	  在javascript中，除法结果会有误差，特别在两个浮点数相除的时候会比较明显。
 * 这个函数返回较为精确的除法结果。 
 * @author yukh 
 * @createTime 2009-8-27
*/
function numberDiv(arg1, arg2,how){
	var t1=0,t2=0,r1,r2; 
	arg1 = arg1.toString();
	arg2 = arg2.toString();
	if(arg1.indexOf(".") != -1)
		t1 = arg1.split(".")[1].length;
	if(arg2.indexOf(".") != -1)
		t2 = arg2.split(".")[1].length;
	with(Math){
		if(arg2*pow(10,t2) == 0){
			alert("被除数不能为0！");
			return 0;
		}
        r1 = Number(arg1.replace(".","")) 
        r2 = Number(arg2.replace(".","")) 
        var result = (r1/r2)*pow(10,t2-t1); 
		if(String.strIsNotEmpty(how))
			result = Math.forDight(result, how);
		return result
    }
}

/**
 * 	  在javascript中，加法结果会有误差，特别在两个浮点数相加的时候会比较明显。
 * 这个函数返回较为精确的加法结果。 
 * @author yukh 
 * @createTime 2009-8-27
*/
function numberAdd(arg1, arg2,how){ 
    var r1 = 0,r2 = 0, m; 
    arg1 = arg1.toString();
    arg2 = arg2.toString();
    if(arg1.indexOf(".") != -1)
   		r1 = arg1.split(".")[1].length;
   	if(arg2.indexOf(".") != -1)
		r2 = arg2.split(".")[1].length;
    m = Math.pow(10,Math.max(r1,r2)) 
    var result = (arg1*m + arg2*m)/m; 
	if(String.strIsNotEmpty(how))
		result = Math.forDight(result, how);
	return result
} 

/**
 * 	  在javascript中，减法结果会有误差，特别在两个浮点数相减的时候会比较明显。
 * 这个函数返回较为精确的减法结果。 
 * @author yukh 
 * @createTime 2009-8-27
*/
function numberMin(arg1, arg2, how){ 
 	var r1=0, r2=0 , m;
 	arg1 = arg1.toString(),arg2 = arg2.toString();
 	if(arg1.indexOf(".") != -1)
 		r1 = arg1.split(".")[1].length;
 	if(arg2.indexOf(".") != -1)
 		r2 = arg2.split(".")[1].length;
 	m = Math.pow(10, Math.max(r1,r2)); 
 	var result = (arg1*m - arg2*m)/m;
	if(String.strIsNotEmpty(how))
		result = Math.forDight(result, how);
	return result
}

/**
 * 根据年和月，得到某年中某一月的天数
 * @author yukh 
 * @createTime 2009-9-2
*/
function getDaysInMonth(month, year){
	var days;		
	switch(month){
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			days = 31;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			days = 30;
			break;
		case 2:
			if (((year% 4)==0) && ((year% 100)!=0) || ((year% 400)==0))				
				days = 29;				
			else								
				days = 28;				
			break;
	}
	return (days);
}	

/**
 * 弹出式窗口
 * @author ykh
 */
function $open(iurl, iwidth, iheight, ileft, itop){
	var wind = window.open(iurl, null,"width="+iwidth+",height="+iheight+",top="+itop+",left="+ileft+",scrollbars=yes");
	return wind;
}
/**************************************** 内置对象改写，添加方法 *************************************/

/**
 * A copy of this string with leading white
 * space removed, or this string if it has no 
 * leading white space.
 * @author yukh 
 * @createTime 2009-7-8
*/
String.prototype.ltrim  = function(){
	return this.replace(/^\s*/, ""); 
}

/**
 * A copy of this string with trailing white
 * space removed, or this string if it has no 
 * trailing white space.
 * @author yukh 
 * @createTime 2009-7-8
*/
String.prototype.rtrim  = function(){
	return this.replace(/\s*$/, "");
}

/**
 *   A copy of this string with leading and trailing white
 *   space removed, or this string if it has no leading or
 *   trailing white space.
 * @author  yukh
 * @createTime 2009-7-8
 */
String.prototype.trim  = function(){
	var str = this;
	str = str.ltrim();
	str = str.rtrim();
	return str;
}

/**
 * 重复自身
 * @param  n  重复次数
 * @author yukh 
 * @createTime 2009-7-8
*/
String.prototype.repeat = function(n){
	var oldStr  = this;
	var newStr  = new StringBuffer();
	for(var i=0; i<n; i++){
		newStr.append(oldStr);
	}
	return newStr.toString();
}


/****************************** 全局对象 *******************************/

/**
 * ajax 请求对象 (返回值: ajax.text / ajax.json / ajax.xml )
 */
var ajax = {
	httpRequest: false
};

/**
 * ajax 请求
 * @param  method           post/get
 * @param  url              处理ajax的URL
 * @param  content          编码格式，可以为null
 * @param  responseType     text/json/xml
 * @param  agent            目前这里全部为 window
 * @param  callback         回调函数
 * @author yukh 
 * @createTime 2009-7-8
*/
function $sendRequest(method, url, content, responseType, agent, callback){
	ajax.httpRequest  = false;

	if(window.XMLHttpRequest){
		ajax.httpRequest = new XMLHttpRequest();
		if(ajax.httpRequest.overrideMimeType){
			ajax.httpRequest.overrideMimeType('text/xml');
		}
	}else if(window.ActiveXObject){
		try{
			ajax.httpRequest = new ActiveXObject("Msxm12.XMLHTTP")
		}catch(e){
			try{
				ajax.httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){}
		}
	}
	
	if(!ajax.httpRequest){
		alert("can't creat XMLHttpRequest object");
		return false;
	}
	
	if(responseType.toLowerCase() == "text" || responseType.toLowerCase() == "xml"){
		ajax.httpRequest.onreadystatechange = function(){
			if(ajax.httpRequest.readyState == 4){
				if(ajax.httpRequest.status == 200){
					ajax.text = ajax.httpRequest.responseText;
					ajax.xml  = ajax.httpRequest.responseXML;

					ajax.responseText = ajax.text;
					ajax.responseXML  = ajax.xml;
					
					if(ajax.text && !ajax.xml.xml){
						try{
							ajax.json = ajax.text.parseJSON();
						}catch(e){}
					}
					
					if( typeof(callback)=='string'){
						agent[callback]();
					}else if( typeof(callback)=='function' ){
						agent.ajax_callback_method = callback;
						agent.ajax_callback_method();
					}else{
						alert("callback method is error");
					}
				}else{
					alert("page is wrong " + ajax.httpRequest.status);
				}
			}
		}
	}else{
		alert("the parameter is not right");
		return false;
	}
	
	if(method.toLowerCase() == "get"){
		var arr = url.split("?");

		url = url + (arr.length==1 ? "?timestamp=" : "&timestamp=") + new Date().getTime();

		ajax.httpRequest.open(method, url, true);

	}else if(method.toLowerCase() == "post"){
		ajax.httpRequest.open(method, url, true);
		ajax.httpRequest.setRequestHeader("Content-Type","text/html");
		content=encodeURI(content);
	}else{
		alert("Http method if wrong");
		return false;
	}
	ajax.httpRequest.send(content);
}

/****************************************************************************************/

/**
 * @author Shanhy
 * @explain 返回浏览器用于 HTTP 请求的用户代理头的值 
 * @createTime 2009-08-26
 */
function getUserAgent(){
	return navigator.userAgent.toLowerCase();
}

/**
 * @author Shanhy
 * @explain 附加CSS样式文件
 */
addCssFile=function(cssPath){
	var head=document.getElementsByTagName('head')[0];
	if(head && head.length > 0)
		head = head[0];
	else
		return;
	var style=document.createElement('link');
	style.href=cssPath;
	style.rel='stylesheet';
	style.type='text/css';
	head.appendChild(style);
};

/**
 * @author Shanhy
 * @explain 附加JS样式文件，创建JavaScript引用
 * @createTime 2009-08-26
 */
addJsFile=function(jsPath){
	var head=document.getElementsByTagName('head');
	if(head && head.length > 0)
		head = head[0];
	else
		return;
	var script=document.createElement('script');
	script.src=jsPath;
	style.type='text/javascript';
	head.appendChild(script);
};

/********************************* 以下为控制效果的JS方法 *******************************/
/**
 * 支持div层的拖动,方法(move、document.onmouseup、document.onmousemove)
 * @author Shanhy
 * @param div的id（支持对象）,div必须添加据对定位和left  top 属性
 * @explain 移动指定的div层效果
 * @createTime 2009-09-04
 */
var Mouse_Obj="none",_x,_y;
document.onmousemove=function(){
	if(Mouse_Obj!=="none"){
		Mouse_Obj.style.left=_x+event.x;
		Mouse_Obj.style.top=_y+event.y;
		event.returnValue = false;
	}
}
document.onmouseup=function(){
	Mouse_Obj="none";
}
function move(o){
	if(typeof(o)=='string')
		o = $(o);
	Mouse_Obj=o.parentElement.parentElement;
	_x=parseInt(Mouse_Obj.style.left)-event.x;
	_y=parseInt(Mouse_Obj.style.top)-event.y;
}

/**
 * 模式层效果(方法show_msg(...)和hide_msg(...))
 * @author Shanhy
 * @param div的id
 * @createTime 2009-09-04
 */
var divBlockHTML = "";
var modeDiv;
function showModeDiv(divBlock)
{
    if(typeof(divBlock)=='string')	
	   divBlock = document.getElementById(divBlock);
	modeDiv = document.createElement("DIV");
	document.body.appendChild(modeDiv);
    modeDiv.style.cssText = "display: none; z-index: 10000; height:100%;background: #000; filter: alpha(opacity=30); LEFT: 0px; POSITION: absolute; TOP: 0px; -moz-opacity:0.5;opacity:0.5;";
    divBlockHTML = divBlock.innerHTML;
    modeDiv.style.display = 'block';
    divBlock.style.zIndex = 10002;
    divBlock.style.display = 'block';

   var bb=(document.compatMode && document.compatMode!="BackCompat") ? document.documentElement : document.body;
   
   if(document.compatMode && document.compatMode!="BackCompat")
   {
      modeDiv.style.width = bb.scrollWidth+"px";
      modeDiv.style.height = bb.scrollHeight+"px";
   }
   else
   {
      modeDiv.style.width = bb.scrollWidth+"px";
      modeDiv.style.height = bb.scrollHeight+"px";
   }
   divBlock.style.left = ((bb.offsetWidth - divBlock.offsetWidth)/2)+"px";
   divBlock.style.top  = (60 + bb.scrollTop)+"px";
}
//隐藏模式层
function hideModeDiv(divBlock)
{ 
	if(typeof(divBlock)=='string')	
	   divBlock = document.getElementById(divBlock);
    divBlock.innerHTML = divBlockHTML;
    modeDiv.style.display = 'none';
    divBlock.style.display = 'none';
    document.body.removeChild(modeDiv);
    divBlockHTML = "";
}

//特殊字符校验
function isNormal(str){
	 	var regTextChar = /[`~!@#$%^&*()+=|{}':;',\\\/\[\].<>?！～＠＃￥％……＆×（）——＋｜｛｝【】‘；：”“’。，、？]/;
        return regTextChar.test(str);
}

/**
 * js 打印 
 * @author yukh 
 * @createTime 2009-7-8
*/
function printData(printId){
	_$hid(printId);
	window.print();
}

 /**
  * cookie 操作
  * @author yukh 
  * @createTime 2009-7-8
 */
var myCookie = {
	set: function(nam, val){
		var Days = 365;            //此 cookie 将被保存 365 天
		var exp  = new Date();     //new Date("December 31, 9998");
		exp.setTime(exp.getTime() + Days*24*60*60*1000);
		document.cookie = nam + "="+ escape(val) +";expire="+ exp.toGMTString();
	},
	
	get: function(nam){
	   var arr = document.cookie.match(new RegExp("(^| )"+nam+"=([^;]*)(;|$)"));
	   if(arr != null) return unescape(arr[2]); return null;
	}
}